home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-02-05 | 66.1 KB | 1,976 lines | [TEXT/MPS ] |
- //---------------------------------------------------------------------
- // Copyright © 1991 Apple Computer, Japan Inc. All rights reserved.
- //
- // '91 Dec.11 Programed by Taro Tanaka
- //
- // Developer Technical Supprt, Service and Support
- //
- //---------------------------------------------------------------------
-
- #include "UDraw.h"
-
- const OSType kFileType = 'colr';
- const OSType kSignature = 'riho'; // Creator name
- const short kWindRsrcID = 1000;
-
- const short kIconWidth = 32;
- const short kIconID = 1000;
-
- const short eventNotHandled = -1708;
-
- // ---- Apple Event Registry ------------------------------------------
- const long kAECoreSuite = 'core';
- const long kAEClose = 'clos';
- const long kAEAbout = 'abou';
- const long kAEQDGraphicsSuite = 'qdrw';
- const long kAEEditGraphic = 'edit';
-
- const long cDocument = 'docu';
- const long cGraphicLine = 'glin';
- const long cGraphicObject = 'cgob';
- const long cGraphicShape = 'cgsh';
- const long cOval = 'covl';
- const long cRectangle = 'crec';
- const long cRoundedRectangle = 'crrc';
-
- const long keyAEBounds = 'kbnd';
- const long keyAECurveHeight = 'kchd';
- const long keyAECurveWidth = 'kcwd';
- const long keyAEDefinitionRect = 'kdef';
- const long keyAEEndPoint = 'kedp';
- const long keyAEFillColor = 'kfcl';
- const long keyAEFillPattern = 'kfpt';
- const long keyAEGraphicObjects = 'kgrs';
- const long keyAELineArrow = 'lnar';
- const long keyAEPenColor = 'kpcl';
- const long keyAEPenPattern = 'kpat';
- const long keyAEPenWidth = 'kpwd';
- const long keyAEStartPoint = 'kstr';
- const long keyAETransferMode = 'ktrn';
-
- const long keyAEShape = 'gshp';
-
- const long typeArc = 'tarc';
- const long typeEnumeration = 'enum';
- const long typeGraphicLine = 'tgln';
- const long typeOval = 'tovl';
- const long typePICT = 'PICT';
- const long typePixelMap = 'tpix';
- const long typeQDPoint = 'QDpt';
- const long typeQDRectangle = 'qdrt';
- const long typeRGBColor = 'RGB ';
- const long typeRectangle = 'rcte';
- const long typeRoundedRectangle = 'trdr';
-
- const long typePattern = 'patt';
- const CmdNumber cSketcher = 1000;
-
- const CmdNumber cBlack = 2001;
- const CmdNumber cRed = 2002;
- const CmdNumber cGreen = 2003;
- const CmdNumber cBlue = 2004;
-
- const CmdNumber cLineNormal = 2100;
-
- const CmdNumber cDeleteFirst = 3001;
- const CmdNumber cDeleteFirstMsg = 3101;
-
- const CmdNumber cSetSelf = 4001;
- const CmdNumber cSetTargetAddress = 4002;
- const CmdNumber cLaunch = 4003;
-
- const CmdNumber cSound = 4501;
-
- const CmdNumber cAEOpen = 5001;
- const CmdNumber cAEPrint = 5002;
- const CmdNumber cAENew = 5003;
- const CmdNumber cAEClose = 5004;
- const CmdNumber cAEAboutApp = 5005;
-
-
- RGBColor gColorArray[cBlue - cBlack + 1];
- Rect gColorRect[cBlue - cBlack + 1];
- Rect gLineRect[4];
- Point gOvalSize;
- TDocument *gTargetDocument;
- long gOldTick;
- Boolean gSound;
-
- extern "C" char* memcpy(void*, void*, int);
- #define pstrcpy(p,q) memcpy(p, q, q[0]+1) // added for translation: Pascal strcpy
-
- AEAddressDesc gSELF; // Target address desc -> SELF
- AEAddressDesc gCurrentTarget; // current address desc
- Boolean gIsCurrentTargetSelf;
- Boolean gIsCurrentTargetLocal; // current target is local or remote?
-
- extern TDrawApplication *gDrawApplication;
-
- // ============================================================================
- // Global routines
- // ============================================================================
- #pragma segment AAEHandler
- pascal void setGrafportToFrontWindow()
- {
- TWindow *aWindow = gDrawApplication->GetFrontWindow();
- TView *aView = aWindow->FindSubView('Draw');
- FailNIL(aView);
- if (aView->Focus());
- }
-
- // ---------------------------------------------------------------------------
- #pragma segment AAEHandler
- pascal void setTargetDocument(short absolutePosition)
- {
- ArrayIndex maxIndex = gDocList->GetSize();
- if (absolutePosition <= maxIndex)
- gTargetDocument = (TDocument*)gDocList->At(absolutePosition);
- else
- gTargetDocument = (TDocument*)gDocList->Last();
- }
-
- // ---------------------------------------------------------------------------
- #pragma segment AAEHandler
- pascal void requestTargetDocument()
- {
- }
-
- // ---------------------------------------------------------------------------
- #pragma segment AAEHandler
- pascal void GetStr255FromTextHandle(Handle hText, StringPtr pStr)
- {
- *pStr = (unsigned char)GetHandleSize(hText);
- memcpy(pStr+1, *hText, (int)GetHandleSize(hText));
- }
-
- // ---------------------------------------------------------------------------
- #pragma segemnt AAEHandler
- pascal short CompStr255(ConstStr255Param aStr, ConstStr255Param bStr)
- {
- short rts = 0;
-
- unsigned char aMin = aStr[0];
- if (aMin>bStr[0])
- aMin = bStr[0];
-
- for(unsigned char i=1;i<aStr[0]+1;i++) {
- if (aStr[i] != bStr[i])
- rts = -1;
- }
- return rts;
- }
-
- // ============================================================================
- // Apple Event Object Accessor
- // ============================================================================
- #pragma segemnt AAEHandler
- pascal OSErr myDocumentAccessor(DescType desiredClass, AEDesc* /* containerToken */, DescType /* containerClass */, DescType keyForm, AEDesc *keyData, AEDesc *theToken, long /* theRefcon */)
- {
- OSErr returnedErr;
-
- returnedErr = eventNotHandled;
- if (desiredClass == cDocument) {
- if (keyForm == formName) {
- FailOSErr(AEDuplicateDesc(keyData, theToken));
- returnedErr = noErr;
- }
- }
- return returnedErr;
- }
-
- // ============================================================================
- // Apple Event Handler
- // ============================================================================
- #pragma segemnt AAEHandler
- pascal OSErr myHandleOAPP(AppleEvent /* *theAppleEvent */, AppleEvent /* *reply */, long /* handlerRefcon */)
- {
- gDrawApplication->OpenNew(cNew);
- return noErr;
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment AAEHandler
- pascal OSErr myHandleODOC(AppleEvent *theAppleEvent, AppleEvent /* *reply */, long /* handlerRefcon */)
- {
- FSSpec openedFSS;
- AppFile openedAppFile;
- Size actualSize;
- AEDescList docList;
- long itemsInList;
- long index;
- AEKeyword returnedKeywd;
- DescType returnedType;
- short wdRefNum;
-
- gDrawApplication->fLaunchWithNewDocument = false;
-
- FailOSErr(AEGetParamDesc(theAppleEvent, keyDirectObject, typeAEList, &docList));
- FailOSErr(AECountItems(&docList, &itemsInList));
- for(index=1;index<=itemsInList;index++) {
- FailOSErr(AEGetNthPtr(&docList, index, typeFSS, &returnedKeywd, &returnedType, (Ptr)&openedFSS, sizeof(openedFSS), &actualSize));
- FailOSErr(OpenWD(openedFSS.vRefNum, openedFSS.parID, 0, &wdRefNum));
- openedAppFile.vRefNum = wdRefNum;
- openedAppFile.fType = kFileType;
- pstrcpy(openedAppFile.fName, openedFSS.name);
- gDrawApplication->OpenOld(cOpen, &openedAppFile);
- }
- FailOSErr(AEDisposeDesc(&docList));
- return noErr;
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment AAEHandler
- pascal OSErr myHandlePDOC(AppleEvent *theAppleEvent, AppleEvent /* *reply */, long /* handlerRefcon */)
- {
- FSSpec openedFSS;
- AppFile openedAppFile;
- Size actualSize;
- AEDescList docList;
- long itemsInList;
- long index;
- AEKeyword returnedKeywd;
- DescType returnedType;
- short wdRefNum;
-
- FailOSErr(AEGetParamDesc(theAppleEvent, keyDirectObject, typeAEList, &docList));
- FailOSErr(AECountItems(&docList, &itemsInList));
- for(index=1;index<=itemsInList;index++) {
- FailOSErr(AEGetNthPtr(&docList, index, typeFSS, &returnedKeywd, &returnedType, (Ptr)&openedFSS, sizeof(openedFSS), &actualSize));
- FailOSErr(OpenWD(openedFSS.vRefNum, openedFSS.parID, 0, &wdRefNum));
- openedAppFile.vRefNum = wdRefNum;
- openedAppFile.fType = kFileType;
- pstrcpy(openedAppFile.fName, openedFSS.name);
- gDrawApplication->PrintDocument(&openedAppFile);
- }
- FailOSErr(AEDisposeDesc(&docList));
- return noErr;
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment AAEHandler
- pascal OSErr myHandleQUIT(AppleEvent /* *theAppleEvent */, AppleEvent /* *reply */, long /* handlerRefcon */)
- {
- TQuitCommand* aQuitCommand = new TQuitCommand;
- aQuitCommand->IQuitCommand(cQuit);
- gDrawApplication->PostCommand((TCommand*)aQuitCommand);
- gAppDone = true;
- return noErr;
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment AAEHandler
- pascal OSErr myHandlerApplDied(AppleEvent *theAppleEvent, AppleEvent /* *reply */, long /* handlerRefcon */)
- {
- AEDesc copyofTarget;
- ProcessSerialNumber targetPSN;
- ProcessSerialNumber diedPSN;
- DescType returnedType;
- Size returnedSize;
- Boolean result;
- long diedErr;
- TNoChangesCommand *aNoChangesCommand;
-
- if (gIsCurrentTargetSelf)
- return noErr;
- else {
- if (gIsCurrentTargetLocal) {
- FailOSErr(AEDuplicateDesc(&gCurrentTarget, ©ofTarget));
- targetPSN = *((ProcessSerialNumber*)*copyofTarget.dataHandle);
- FailOSErr(AEGetParamPtr(theAppleEvent, keyProcessSerialNumber, typeProcessSerialNumber, &returnedType, (Ptr)&diedPSN, sizeof(ProcessSerialNumber), &returnedSize));
- FailOSErr(AEGetParamPtr(theAppleEvent, keyErrorNumber, typeLongInteger, &returnedType, (Ptr)&diedErr, sizeof(long), &returnedSize));
- FailOSErr(SameProcess(&targetPSN, &diedPSN, &result));
- if (result) {
- short itemHit = MacAppAlert(1000, nil);
- aNoChangesCommand = (TNoChangesCommand*)new TSetSelfCmd;
- FailNIL(aNoChangesCommand);
- aNoChangesCommand->INoChangesCommand(cSetSelf, (TDocument*)nil, (TView*)nil, (TScroller*)nil);
- gDrawApplication->PostCommand((TCommand*)aNoChangesCommand);
- }
- }
- }
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment AAEHandler
- pascal OSErr myHandleCloseWindow(AppleEvent *theAppleEvent, AppleEvent /* *reply */, long /* handlerRefcon */)
- {
- AEDesc objDesc;
- AEDesc aToken;
- TCloseWindowCommand *aCloseWindowCommand;
- Str255 aDocName;
- Str255 aDocTitle;
- Str255 aCStringDocTitle;
-
-
- FailOSErr(AEGetParamDesc(theAppleEvent, keyDirectObject, typeObjectSpecifier, &objDesc));
- if (AEResolve(&objDesc, kAEIDoMinimum, &aToken) == noErr) {
- GetStr255FromTextHandle(aToken.dataHandle, (StringPtr)&aDocName);
- for(short i=1;i<gDocList->GetSize()+1;i++) {
- TDocument *aDocument = (TDocument*)gDocList->At(i);
- GetStr255FromTextHandle((Handle)aDocument->fTitle, (StringPtr)&aCStringDocTitle);
- memcpy(&aDocTitle, &aCStringDocTitle + 1, aCStringDocTitle[0]);
- if (CompStr255((ConstStr255Param)aDocName,
- (ConstStr255Param)aDocTitle) == 0) {
- aCloseWindowCommand = new TCloseWindowCommand;
- FailNIL(aCloseWindowCommand);
- aCloseWindowCommand->ICloseWindowCommand(cClose, (TWindow*)((TDocument*)gDocList->At(i))->fWindowList->Last());
- gDrawApplication->PostCommand((TCommand*)aCloseWindowCommand);
- }
- }
- }
- else
- SysBeep(1);
- return noErr;
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment ASelCommand
- pascal Boolean myAbout(DialogPtr theDialog, EventRecord* /* theEvent */, short* /* itemHit */)
- {
- Rect r;
-
- if ((TickCount() - gOldTick) > 3) {
- gOldTick = TickCount();
- SetPort((GrafPtr)theDialog);
- SetOrigin(0,0);
- long x = ((Random() + 32768) * 16 / 65536) * 20;
- long y = ((Random() + 32768) * 16 / 65536) * 20;
-
- r.top = (short)y;
- r.left = (short)x;
- r.right = r.left + 20;
- r.bottom = r.top + 20;
-
- InvertRect(&r);
- }
- return false;
- }
-
-
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment AAEHandler
- pascal OSErr myHandleAbout(AppleEvent /* *theAppleEvent */, AppleEvent /* *reply */, long /* handlerRefcon */)
- {
- // TAboutAppCommand *anAboutAppCommand;
-
- // anAboutAppCommand = new TAboutAppCommand;
- // FailNIL(anAboutAppCommand);
- // anAboutAppCommand->IAboutAppCommand(cAboutApp);
- // gDrawApplication->PostCommand((TCommand*)anAboutAppCommand);
-
- gOldTick = TickCount();
-
- short itemHit = MacAppAlert(1001, (Ptr)&myAbout);
- return noErr;
- }
- //--------------------------------------------------------------------------------------------------
- #pragma segment AAEHandler
- pascal OSErr myHandlerWildCard(AppleEvent /* *theAppleEvent */, AppleEvent /* *reply */, long /* handlerRefcon */)
- {
- return noErr;
- }
-
- //--------------------------------------------------------------------------------------------------
- #pragma segment AAEHandler
- pascal OSErr myHandleQuickDraw(AppleEvent *theAppleEvent, AppleEvent* /* reply */, long /* handlerRefcon */)
- {
- DescType returnedType;
- Size returnedSize;
- DescType pShape;
- OSErr AEErr;
- Rect pBounds;
- Rect pDefRect;
- RGBColor pFillColor;
- Pattern pFillPattern;
- RGBColor pPenColor;
- Pattern pPenPattern;
- short pPenWidth;
- short pTransferMode;
- Point pEndPoint;
- Point pStartPoint;
- short pLineArrow;
- Point pCurve;
- PicHandle pPicHandle;
- Handle pSndHandle;
- short pSndID;
-
- TDraw* aDraw;
-
- //--------------------------- set the environment of QuickDraw
- PenNormal();
-
- AEErr = AEGetParamPtr(theAppleEvent, keyAEShape, typeType, &returnedType, (Ptr)&pShape, sizeof(DescType), &returnedSize);
-
- //----- cGraphicObject;
- AEErr = AEGetParamPtr(theAppleEvent, keyAEBounds, typeQDRectangle, &returnedType, (Ptr)&pBounds, sizeof(Rect), &returnedSize);
- AEErr = AEGetParamPtr(theAppleEvent, keyAETransferMode, typeEnumeration, &returnedType, (Ptr)&pTransferMode, sizeof(short), &returnedSize);
-
- if (pShape == typeGraphicLine) {
- AEErr = AEGetParamPtr(theAppleEvent, keyAEEndPoint, typeQDPoint, &returnedType, (Ptr)&pEndPoint, sizeof(Point), &returnedSize);
- AEErr = AEGetParamPtr(theAppleEvent, keyAELineArrow, typeEnumeration, &returnedType, (Ptr)&pLineArrow, sizeof(Point), &returnedSize);
- AEErr = AEGetParamPtr(theAppleEvent, keyAEPenColor, typeRGBColor, &returnedType, (Ptr)&pPenColor, sizeof(RGBColor), &returnedSize);
- AEErr = AEGetParamPtr(theAppleEvent, keyAEPenPattern, typePattern, &returnedType, (Ptr)&pPenPattern, sizeof(Pattern), &returnedSize);
- AEErr = AEGetParamPtr(theAppleEvent, keyAEPenWidth, typeShortInteger, &returnedType, (Ptr)&pPenWidth, sizeof(short), &returnedSize);
- AEErr = AEGetParamPtr(theAppleEvent, keyAEStartPoint, typeQDPoint, &returnedType, (Ptr)&pStartPoint, sizeof(Point), &returnedSize);
- TDrawingLine* aDrawLine = new TDrawingLine;
- RGBForeColor(&pPenColor);
- PenMode(pTransferMode);
- PenSize(pPenWidth, pPenWidth);
- aDrawLine->IStartEnd(pStartPoint, pEndPoint);
- aDraw = (TDraw*)aDrawLine;
- Pt2Rect(pStartPoint, pEndPoint, &pDefRect);
- aDraw->IDraw(&pDefRect, &pPenColor, (ConstPatternParam*)&pFillPattern, pPenWidth);
- pSndID = 132;
- }
- else {
- //----- cGraphicShape;
- AEErr = AEGetParamPtr(theAppleEvent, keyAEDefinitionRect, typeQDRectangle, &returnedType, (Ptr)&pDefRect, sizeof(Rect), &returnedSize);
- AEErr = AEGetParamPtr(theAppleEvent, keyAEFillColor, typeRGBColor, &returnedType, (Ptr)&pFillColor, sizeof(RGBColor), &returnedSize);
- AEErr = AEGetParamPtr(theAppleEvent, keyAEFillPattern, typePattern, &returnedType, (Ptr)&pFillPattern, sizeof(Pattern), &returnedSize);
- AEErr = AEGetParamPtr(theAppleEvent, keyAEPenColor, typeRGBColor, &returnedType, (Ptr)&pPenColor, sizeof(RGBColor), &returnedSize);
- AEErr = AEGetParamPtr(theAppleEvent, keyAEPenPattern, typePattern, &returnedType, (Ptr)&pPenPattern, sizeof(Pattern), &returnedSize);
- AEErr = AEGetParamPtr(theAppleEvent, keyAEPenWidth, typeShortInteger, &returnedType, (Ptr)&pPenWidth, sizeof(short), &returnedSize);
-
- RGBForeColor(&pPenColor);
- PenMode(pTransferMode);
- PenSize(pPenWidth, pPenWidth);
- PenPat((ConstPatternParam)pPenPattern);
- switch (pShape) {
- case typeRectangle:
- aDraw = (TDraw*)new TDrawingRect;
- pSndID = 129;
- break;
- case typeOval:
- aDraw = (TDraw*)new TDrawingOval;
- pSndID = 130;
- break;
- case typeRoundedRectangle:
- AEErr = AEGetParamPtr(theAppleEvent, keyAECurveHeight, typeShortInteger, &returnedType, (Ptr)&pCurve.v, sizeof(short), &returnedSize);
- AEErr = AEGetParamPtr(theAppleEvent, keyAECurveWidth, typeShortInteger, &returnedType, (Ptr)&pCurve.h, sizeof(short), &returnedSize);
- TDrawingRRect* aDrawRRect = new TDrawingRRect;
- aDrawRRect->ISetOval(pCurve);
- aDraw = (TDraw*)aDrawRRect;
- pSndID = 131;
- break;
- case typePICT:
- AEErr = AESizeOfParam(theAppleEvent, keyAEGraphicObjects, &returnedType, &returnedSize);
- Size pPicDataSize = returnedSize;
- pPicHandle = (PicHandle)NewHandle(pPicDataSize);
- AEErr = AEGetParamPtr(theAppleEvent, keyAEGraphicObjects, typePICT, &returnedType, (Ptr)(*pPicHandle), pPicDataSize, &returnedSize);
- pDefRect = (**pPicHandle).picFrame;
- TDrawingPICT* aDrawPICT = new TDrawingPICT;
- aDrawPICT->ISetPICT(pPicHandle);
- aDraw = (TDraw*)aDrawPICT;
- pPenWidth = 0;
- pFillColor = gRGBBlack;
- pSndID = 128;
- default:
- pSndID = 128;
- break;
- }
- aDraw->IDraw(&pDefRect, &pFillColor, (ConstPatternParam*)&pFillPattern, pPenWidth);
- }
- pSndHandle = GetResource('snd ', pSndID);
- if (gSound == true)
- FailOSErr(SndPlay((SndChannelPtr)nil, pSndHandle, true));
- TDrawDocument *aDrawDocument = (TDrawDocument*)gDocList->Last();
- if (aDrawDocument != nil) {
- aDrawDocument->AddDrawLast(aDraw);
- InsetRect(&pDefRect, -pPenWidth, -pPenWidth);
- aDrawDocument->fDrawView->InvalidRect(&pDefRect); // force update
- }
- RGBForeColor(&gRGBBlack);
- PenNormal();
- return noErr;
- }
-
-
- // ============================================================================
- // Draw Application
- // ============================================================================
- #pragma segment AInit
- pascal void TDrawApplication::IDrawApplication()
- {
- ProcessSerialNumber aDrawPSN;
- TNoChangesCommand *aCommand;
-
- this->IApplication(kFileType);
- gColorArray[cBlack - cBlack] = gRGBBlack;
- gColorArray[cRed - cBlack].red = 0xDD6B;
- gColorArray[cRed - cBlack].green = 0x08C2;
- gColorArray[cRed - cBlack] .blue = 0x06A2;
- gColorArray[cGreen - cBlack].red = 0;
- gColorArray[cGreen - cBlack].green = 0x8000;
- gColorArray[cGreen - cBlack].blue = 0x11B0;
- gColorArray[cBlue - cBlack].red = 0;
- gColorArray[cBlue - cBlack].green = 0;
- gColorArray[cBlue - cBlack].blue = 0xD400;
- for (short iconIndex = cBlack; iconIndex <= cBlue; iconIndex++)
- SetRect(&gColorRect[iconIndex - cBlack],
- kIconWidth * (iconIndex - cBlack), // left
- 0, // top
- kIconWidth * (iconIndex - cBlack + 1), // right
- kIconWidth); // bottom
- for (short lineIndex = 1; lineIndex < 5; lineIndex++)
- SetRect(&gLineRect[lineIndex-1],
- 0,
- (lineIndex - 1) * 16,
- 32,
- lineIndex * 16);
- gOvalSize.h = 16;
- gOvalSize.v = 16;
- if (gDeadStripSuppression) {
- TDrawView* aDrawView = new TDrawView;
- TPaletteView* aPaletteView = new TPaletteView;
- TShapeGridView* aShapeGridView = new TShapeGridView;
- TPatternView* aPatternView = new TPatternView;
- TLineView* aLineView = new TLineView;
- }
-
- gIsCurrentTargetSelf = true;
- Enable(cSetSelf, true);
- aCommand = (TNoChangesCommand*)new TSetSelfCmd;
- FailNIL(aCommand);
- aCommand->INoChangesCommand(cSetSelf, (TDocument*)nil, (TView*)nil, (TScroller*)nil);
- this->PostCommand((TCommand*)aCommand);
-
- gSound = true;
-
- // install apple event accessor -------------------- Core Apple Event
- FailOSErr(AEInstallObjectAccessor(cDocument, typeNull, (accessorProcPtr)&myDocumentAccessor, 0, false));
-
- // install apple event handler -------------------- Required Apple Event
- FailOSErr(AEInstallEventHandler(kCoreEventClass,kAEOpenApplication, (EventHandlerProcPtr)&myHandleOAPP,0,false));
- FailOSErr(AEInstallEventHandler(kCoreEventClass,kAEOpenDocuments, (EventHandlerProcPtr)&myHandleODOC,0,false));
- FailOSErr(AEInstallEventHandler(kCoreEventClass,kAEPrintDocuments, (EventHandlerProcPtr)&myHandlePDOC,0,false));
- FailOSErr(AEInstallEventHandler(kCoreEventClass,kAEQuitApplication, (EventHandlerProcPtr)&myHandleQUIT,0,false));
- // install apple event handler -------------------- Core Apple Event
- FailOSErr(AEInstallEventHandler(kCoreEventClass,kAEApplicationDied, (EventHandlerProcPtr)&myHandlerApplDied,0,false));
- FailOSErr(AEInstallEventHandler(kAECoreSuite, kAEClose, (EventHandlerProcPtr)&myHandleCloseWindow,0,false));
- FailOSErr(AEInstallEventHandler(kCoreEventClass,kAEAbout, (EventHandlerProcPtr)&myHandleAbout,0,false));
- // install apple event handler -------------------- QuickDraw Apple Event
- FailOSErr(AEInstallEventHandler(kAEQDGraphicsSuite, kAEEditGraphic, (EventHandlerProcPtr)&myHandleQuickDraw, 0, false));
- FailOSErr(AEInstallEventHandler(typeWildCard, typeWildCard, (EventHandlerProcPtr)&myHandlerWildCard,0,false));
-
- aDrawPSN.highLongOfPSN = 0;
- aDrawPSN.lowLongOfPSN = kCurrentProcess;
- FailOSErr(AECreateDesc(typeProcessSerialNumber, (Ptr)&aDrawPSN, sizeof(ProcessSerialNumber), (AEDesc*)&gSELF));
- }
-
- // ------------------------------------------------------------------------
- #pragma segment AOpen
- pascal TDocument* TDrawApplication::DoMakeDocument(CmdNumber /* itsCmdNumber */)
- {
- TDrawDocument* aDrawDocument = new TDrawDocument;
- FailNIL(aDrawDocument);
- aDrawDocument->IDrawDocument();
- return aDrawDocument;
- }
-
- //----------------------------------------------------------------------------
- #pragma segment ASelCommand
- pascal TCommand* TDrawApplication::DoMenuCommand(CmdNumber aCmdNumber)
- {
- AppleEvent aQuitAppleEvent;
- AppleEvent reply;
- TNoChangesCommand *aNoChangesCommand;
- TAEOldDocCommand *aOldDocCommand;
- TAENewDocCommand *aNewDocCommand;
- TAECloseWindowCommand *aCloseWindowCommand;
-
- switch (aCmdNumber) {
- case cAEAboutApp:
- aNoChangesCommand = (TNoChangesCommand*)new TAEAboutAppCommand;
- FailNIL(aNoChangesCommand);
- aNoChangesCommand->INoChangesCommand(aCmdNumber, (TDocument*)nil, (TView*)nil, (TScroller*)nil);
- return (TCommand*)aNoChangesCommand;
- case cAENew:
- aNewDocCommand = new TAENewDocCommand;
- FailNIL(aNewDocCommand);
- aNewDocCommand->IAENewDocCommand(aCmdNumber);
- return (TCommand*)aNewDocCommand;
- case cAEOpen:
- aOldDocCommand = new TAEOldDocCommand;
- FailNIL(aOldDocCommand);
- aOldDocCommand->IAEOldDocCommand(aCmdNumber);
- return (TCommand*)aOldDocCommand;
- case cAEClose:
- aCloseWindowCommand = new TAECloseWindowCommand;
- FailNIL(aCloseWindowCommand);
- aCloseWindowCommand->IAECloseWindowCommand(aCmdNumber);
- return (TCommand*)aCloseWindowCommand;
- case cQuit:
- FailOSErr(AECreateAppleEvent(kCoreEventClass, kAEQuitApplication, &gCurrentTarget, kAutoGenerateReturnID, kAnyTransactionID, &aQuitAppleEvent));
- FailOSErr(AESend(&aQuitAppleEvent, &reply, kAENoReply, kAENormalPriority, 0, (IdleProcPtr)nil, (EventFilterProcPtr)nil));
- return gNoChanges;
- case cSetSelf:
- aNoChangesCommand = (TNoChangesCommand*)new TSetSelfCmd;
- FailNIL(aNoChangesCommand);
- aNoChangesCommand->INoChangesCommand(cSetSelf, (TDocument*)nil, (TView*)nil, (TScroller*)nil);
- return (TCommand*)aNoChangesCommand;
- case cSetTargetAddress:
- aNoChangesCommand = (TNoChangesCommand*)new TSetTargetAddress;
- FailNIL(aNoChangesCommand);
- aNoChangesCommand->INoChangesCommand(cSetTargetAddress, (TDocument*)nil, (TView*)nil, (TScroller*)nil);
- return (TCommand*)aNoChangesCommand;
- case cLaunch:
- aNoChangesCommand = (TNoChangesCommand*)new TLaunchApplication;
- FailNIL(aNoChangesCommand);
- aNoChangesCommand->INoChangesCommand(cLaunch, (TDocument*)nil, (TView*)nil, (TScroller*)nil);
- return (TCommand*)aNoChangesCommand;
- case cSound:
- if (gSound == true)
- gSound = false;
- else
- gSound = true;
- break;
- default:
- return inherited::DoMenuCommand(aCmdNumber);
- }
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ARes
- pascal void TDrawApplication::DoSetupMenus()
- {
- inherited::DoSetupMenus();
- Enable(cAEOpen, true);
- Enable(cAENew, true);
- Enable(cAEClose, true);
- Enable(cSetSelf, true);
- Enable(cSetTargetAddress, true);
- EnableCheck(cSetSelf, true, gIsCurrentTargetSelf);
- EnableCheck(cSetTargetAddress, true, !gIsCurrentTargetSelf);
- Enable(cLaunch, true);
- Enable(cSound, true);
- EnableCheck(cSound, true, gSound);
- }
-
- //----------------------------------------------------------------------------
- #pragma segment ASelCommand
- pascal TCommand *TDrawApplication::HandleAlienEvent(EventInfo *theEventInfo)
- {
- if (theEventInfo->thePEvent->what == kHighLevelEvent)
- FailOSErr(AEProcessAppleEvent(theEventInfo->thePEvent));
- return gNoChanges;
- }
-
- //----------------------------------------------------------------------------
- #pragma segment AOpen
- pascal void TDrawApplication::HandleFinderRequest()
- {
- // we need not handle request from Finder.
- }
-
-
- // ============================================================================
- #pragma segment AOpen
- pascal void TDrawDocument::IDrawDocument()
- {
- fDrawList = NULL; // in case IDocument fails
- this->IDocument(kFileType, kSignature, kUsesDataFork,
- !kUsesRsrcFork, !kDataOpen, !kRsrcOpen);
- fSavePrintInfo = true;
- TList* aList = NewList();
- fDrawList = aList;
- fDrawList->SetEltType("\pTDraw"); // for Inspector window
- this->SetColorCmd(cBlack);
- this->SetLineCmd(cLineNormal);
- }
-
- // ------------------------------------------------------------------------
- #pragma segment AClose
- pascal void TDrawDocument::Free() //override
- {
- if (fDrawList != NULL)
- fDrawList->FreeList(); // free Draw objects and List object
- inherited::Free();
- }
-
- // ------------------------------------------------------------------------
- #pragma segment ARes
- pascal void TDrawDocument::FreeData() //override
- {
- fDrawList->FreeAll(); // Revert: free Draw objects - not List object
- }
-
- // ------------------------------------------------------------------------
- #pragma segment AOpen
- pascal void TDrawDocument::DoMakeViews(Boolean /* forPrinting */)
- {
- TWindow* aWindow = NewTemplateWindow(kWindRsrcID, this);
-
- TDrawView* aDrawView = (TDrawView *) aWindow->FindSubView('Draw'); // type coercion
- fDrawView = aDrawView;
-
- TPaletteView* aPaletteView = (TPaletteView *) aWindow->FindSubView('pall'); // type coercion
- fPaletteView = aPaletteView;
-
- TLineView* aLineView = (TLineView *) aWindow->FindSubView('line'); // type coercion
-
- TStdPrintHandler* aStdHandler = new TStdPrintHandler;
- FailNIL(aStdHandler);
- aStdHandler->IStdPrintHandler(this, aDrawView, kSquareDots,
- kFixedSize, kFixedSize);
- }
-
-
- // ------------------------------------------------------------------------------
- #pragma segment ASelCommand
- pascal void TDrawDocument::SetColorCmd(CmdNumber aCmdNumber)
- {
- fColorCmdNumber = aCmdNumber;
- }
-
-
- // ------------------------------------------------------------------------------
- #pragma segment ASelCommand
- pascal CmdNumber TDrawDocument::GetColorCmd()
- {
- return fColorCmdNumber;
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ASelCommand
- pascal void TDrawDocument::SetLineCmd(CmdNumber aCmdNumber)
- {
- fLineCmdNumber = aCmdNumber;
- }
-
-
- // ------------------------------------------------------------------------------
- #pragma segment ASelCommand
- pascal CmdNumber TDrawDocument::GetLineCmd()
- {
- return fLineCmdNumber;
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ARes
- pascal void TDrawDocument::DoSetupMenus()
- {
- inherited::DoSetupMenus(); // always do this, so other objects get chance
- if (this->FirstDraw() != NULL)
- Enable(cDeleteFirst, true);
- for (short colorIndex = cBlack; colorIndex <= cBlue; colorIndex++)
- EnableCheck(colorIndex, true, (this->GetColorCmd() == colorIndex));
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ASelCommand
- pascal TCommand *TDrawDocument::DoMenuCommand(CmdNumber aCmdNumber)
- {
- switch (aCmdNumber){
- case cBlack:
- case cRed:
- case cGreen:
- case cBlue:
- fPaletteView->ChangeSelection(aCmdNumber);
- this->SetColorCmd(aCmdNumber);
- return gNoChanges;
-
- case cDeleteFirst:
- TDeleteCmd* aDeleteCmd = new TDeleteCmd;
- FailNIL(aDeleteCmd);
- aDeleteCmd->IDeleteCmd(fDrawView, this);
- return aDeleteCmd;
-
- default: // always do this, so other objects get a chance
- return inherited::DoMenuCommand(aCmdNumber);
-
- } // switch
- }
-
- // ------------------------------------------------------------------------
- #pragma segment ASelCommand
- pascal void TDrawDocument::AddDrawFirst(TDraw *aDraw)
- {
- fDrawList->InsertFirst(aDraw);
- }
-
-
- // ------------------------------------------------------------------------
- #pragma segment ASelCommand
- pascal void TDrawDocument::AddDrawLast(TDraw *aDraw)
- {
- fDrawList->InsertLast(aDraw);
- }
-
-
- // ------------------------------------------------------------------------
- #pragma segment ASelCommand
- pascal TDraw *TDrawDocument::FirstDraw()
- {
- return (TDraw *) fDrawList->First();
- }
-
-
- // ------------------------------------------------------------------------
- #pragma segment ASelCommand
- pascal void TDrawDocument::DeleteDraw(TDraw *aDraw)
- {
- fDrawList->Delete(aDraw);
- }
-
- // ------------------------------------------------------------------------
- typedef pascal void (*DoToObject)(TObject *anObject, void *link);
-
- #pragma segment ARes
- pascal void TDrawDocument::ForEachDrawDo(DoToADrawProc DoToDraw, void *DoToDraw_StaticLink)
- {
- fDrawList->Each((DoToObject) DoToDraw, DoToDraw_StaticLink);
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment AWriteFile
- pascal void TDrawDocument::DoNeedDiskSpace(long *dataForkBytes, long *rsrcForkBytes)
- // File format:
- // Print info
- // Integer - # Draws saved in the file
- // Draw info #1
- // Draw info #2
- // etc.
- {
- inherited::DoNeedDiskSpace(dataForkBytes, rsrcForkBytes); // to save print info
- ArrayIndex numberOfDraws = fDrawList->GetSize();
- long numberOfDrawsBytes = sizeof(numberOfDraws);
- TDraw *aDraw = new TDraw;
- FailNIL(aDraw);
- long DrawBytes = aDraw->ReturnBytes();
- aDraw->Free();
- *dataForkBytes += numberOfDrawsBytes + (DrawBytes * numberOfDraws);
- };
-
- // ------------------------------------------------------------------------------
- #pragma segment AWriteFile
- pascal void WriteADraw(TDraw *aDraw, short *fileRefNumPtr)
- {
- aDraw->WriteDraw(*fileRefNumPtr);
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment AWriteFile
- pascal void TDrawDocument::DoWrite(short aRefNum, Boolean makingCopy)
- {
- inherited::DoWrite(aRefNum, makingCopy); // write print info
- ArrayIndex numberOfDraws = fDrawList->GetSize();
- long numberOfDrawsBytes = sizeof(numberOfDraws);
- FailOSErr(FSWrite(aRefNum, &numberOfDrawsBytes, (Ptr) &numberOfDraws));
- // write # Draws
- this->ForEachDrawDo((DoToADrawProc)WriteADraw, &aRefNum); // each Draw writes itself
- };
-
-
- // ------------------------------------------------------------------------------
- #pragma segment AReadFile
- pascal void TDrawDocument::DoRead(short aRefNum,
- Boolean rsrcExists, Boolean forPrinting)
-
- {
- short numberOfDraws;
- TDraw *aNewDraw;
- long dataBytes;
- OSType aShapeType;
-
- inherited::DoRead(aRefNum, rsrcExists, forPrinting); // read printer info
- long numberOfDrawsBytes = sizeof(numberOfDraws);
- FailOSErr(FSRead(aRefNum, &numberOfDrawsBytes, (Ptr) &numberOfDraws));
- // read # Draws
- dataBytes = sizeof(OSType);
- for (short index = 0; index < numberOfDraws; index++){
- FailOSErr(FSRead(aRefNum, &dataBytes, (Ptr) &aShapeType));
- switch (aShapeType) {
- case typeRectangle:
- aNewDraw = (TDraw*)new TDrawingRect;
- break;
- case typeOval:
- aNewDraw = (TDraw*)new TDrawingOval;
- break;
- case typeGraphicLine:
- aNewDraw = (TDraw*)new TDrawingLine;
- break;
- case typeRoundedRectangle:
- aNewDraw = (TDraw*)new TDrawingRRect;
- break;
- case typePICT:
- aNewDraw = (TDraw*)new TDrawingPICT;
- break;
- default:
- aNewDraw = new TDraw;
- break;
- }
- aNewDraw->ReadDraw(aRefNum);
- this->AddDrawLast(aNewDraw); // add it to the list
- }
- }
-
- // ------------------------------------------------------------------------
- #if qInspector
- #pragma segment AFields
- pascal void TDrawDocument::Fields(pascal void (*DoToField)(StringPtr fieldName, Ptr fieldAddr, short
- fieldType, void *DoToField_StaticLink), void *DoToField_StaticLink)
-
- {
- DoToField("\pTDrawDocument", NULL, bClass, DoToField_StaticLink);
- DoToField("\pfDrawView", (Ptr) &fDrawView, bObject, DoToField_StaticLink);
- DoToField("\pfPaletteView", (Ptr) &fPaletteView, bObject, DoToField_StaticLink);
- DoToField("\pfDrawList", (Ptr) &fDrawList, bObject, DoToField_StaticLink);
- DoToField("\pfColorCmdNumber", (Ptr) &fColorCmdNumber, bCmdNumber, DoToField_StaticLink);
- inherited::Fields(DoToField, DoToField_StaticLink);
- }
- #endif
-
- // ============================== Draw View =================================
- #pragma segment AOpen
- pascal void TDrawView::IRes(TDocument *itsDocument,
- TView *itsSuperView, Ptr *itsParams)
- {
- inherited::IRes(itsDocument, itsSuperView, itsParams);
- fDrawDocument = (TDrawDocument *) itsDocument;
- fIdleFreq = 0; // so DoSetCursor gets called often
- }
-
- // ------------------------------------------------------------------------
- #pragma segment ASelCommand
- pascal TCommand* TDrawView::DoMouseCommand(Point* /* theMouse */,
- EventInfo* /* info */,
- Point* /* hysteresis*/)
- {
- TSketcher* aSketcher = new TSketcher;
- FailNIL(aSketcher);
- TShapeGridView* aShapeGridView = (TShapeGridView*)this->GetWindow()->FindSubView('Gshp');
- this->fShapeType = aShapeGridView->GetShapeType();
- aSketcher->ISketcher(this, fDrawDocument, this->fShapeType); // itsDocument
- return aSketcher;
- };
-
- // ------------------------------------------------------------------------
- #pragma segment ARes
- pascal Boolean TDrawView::DoSetCursor(Point /* localPoint */,
- RgnHandle cursorRgn)
- {
- Rect viewBorder;
-
- SetCursor(*GetCursor(crossCursor)); // "+" shape
- this->GetQDExtent(&viewBorder);
- RectRgn(cursorRgn, &viewBorder);
- return true;
- }
-
- // ------------------------------------------------------------------------
- pascal void DrawADraw(TDraw *aDraw, Rect *updateArea)
- {
- Rect DrawRect = aDraw->ReturnFrame();
- if (SectRect(&DrawRect, updateArea, &DrawRect))
- aDraw->DrawDraw();
- }
-
- // ------------------------------------------------------------------------
- #pragma segment ARes
- pascal void TDrawView::Draw(Rect *area)
- {
- fDrawDocument->ForEachDrawDo((DoToADrawProc) DrawADraw, area);
- }
-
- /// ------------------------------------------------------------------------
- #pragma segment DoMouseCommand
- pascal void TDrawView::TrackFeedback(VPoint *anchorPoint, VPoint *nextPoint, Boolean /* turnItOn */, Boolean mouseDidMove)
- {
- VRect vr;
- Rect r;
-
- if (mouseDidMove) {
- Pt2VRect(anchorPoint, nextPoint, &vr);
- ViewToQDRect(&vr, &r);
- PenPat((ConstPatternParam)qd.gray);
- switch (fShapeType) {
- case typeGraphicLine:
- MoveTo(ViewToQDPt(anchorPoint).h, ViewToQDPt(anchorPoint).v);
- LineTo(ViewToQDPt(nextPoint).h, ViewToQDPt(nextPoint).v);
- break;
- case typeRectangle:
- FrameRect(&r);
- break;
- case typeOval:
- FrameOval(&r);
- break;
- case typeRoundedRectangle:
- FrameRoundRect(&r, 16, 16);
- break;
- case typePICT:
- FrameRect(&r);
- break;
- default:
- FrameRect(&r);
- break;
- }
- }
- }
-
- // ============================== Palette View =================================
- #pragma segment AOpen
- pascal void TPaletteView::IRes(TDocument *itsDocument,
- TView *itsSuperView, Ptr *itsParams)
- {
- inherited::IRes(itsDocument, itsSuperView, itsParams);
- fDrawDocument = (TDrawDocument *) itsDocument;
- }
-
-
- // -----------------------------------------------------------------------------
- #pragma segment ARes
- pascal void TPaletteView::Draw(Rect* /* area */)
- {
- Rect aFrame;
-
- for (short colorIndex = cBlack; colorIndex <= cBlue; colorIndex++){
- RGBForeColor(&gColorArray[colorIndex - cBlack]);
- PaintRect(&gColorRect[colorIndex - cBlack]);
- }
- ForeColor(blackColor);
- this->GetQDExtent(&aFrame);
- // SetPt(&aPenSize, 1, 1);
- // this->Adorn(&aFrame, aPenSize, adnLineBottom);
- }
-
- // --------------------------- called after .Draw -------------------------------
- #pragma segment ARes
- pascal void TPaletteView::DoHighlightSelection(HLState fromHL, HLState toHL)
- {
- PenSize(4,4);
- Rect aRect = gColorRect[fDrawDocument->GetColorCmd() - cBlack];
- aRect.bottom--;
- SetHLPenState(fromHL, toHL);
- FrameRect(&aRect);
- PenNormal();
- }
-
-
- // ----------------------------------------------------------------------------
- #pragma segment ASelCommand
- pascal void TPaletteView::ChangeSelection(CmdNumber newColorNumber)
- {
- CmdNumber currentColorNumber = fDrawDocument->GetColorCmd();
- if (newColorNumber != currentColorNumber){
- if (Focus()) this->DoHighlightSelection(hlOn, hlOff); // turn off old
- fDrawDocument->SetColorCmd(newColorNumber);
- if (Focus()) this->DoHighlightSelection(hlOff, hlOn); // turn on new
- } // if
- }
-
- // ----------------------------------------------------------------------------
- #pragma segment ASelCommand
- pascal TCommand* TPaletteView::DoMouseCommand(Point* theMouse,
- EventInfo* /* info */,
- Point* /* hysteresis */)
- {
- CmdNumber newColorCmd = (theMouse->h / kIconWidth) + cBlack;
- if ((newColorCmd <= cBlue))
- this->ChangeSelection(newColorCmd);
- return gNoChanges; // not "Undo"able
- }
-
-
- // ----------------------------------------------------------------------------
- #if qInspector
- #pragma segment AFields
- pascal void TPaletteView::Fields(pascal void (*DoToField)(StringPtr fieldName, Ptr fieldAddr, short
- fieldType, void *DoToField_StaticLink), void *DoToField_StaticLink)
- {
- DoToField("\pTPaletteView", NULL, bClass, DoToField_StaticLink);
- DoToField("\pfDrawDocument", (Ptr) &fDrawDocument, bObject, DoToField_StaticLink);
- inherited:: Fields(DoToField, DoToField_StaticLink);
- };
- #endif
-
- // ============================== Line View =================================
- #pragma segment AOpen
- pascal void TLineView::IRes(TDocument *itsDocument,
- TView *itsSuperView, Ptr *itsParams)
- {
- inherited::IRes(itsDocument, itsSuperView, itsParams);
- fDrawDocument = (TDrawDocument *) itsDocument;
- }
-
-
- // ----------------------------------------------------------------------------
- #pragma segment ASelCommand
- pascal void TLineView::ChangeSelection(CmdNumber newLineNumber)
- {
- CmdNumber currentLineNumber = fDrawDocument->GetLineCmd();
- if (newLineNumber != currentLineNumber){
- if (Focus()) this->DoHighlightSelection(hlOn, hlOff); // turn off old
- fDrawDocument->SetLineCmd(newLineNumber);
- if (Focus()) this->DoHighlightSelection(hlOff, hlOn); // turn on new
- } // if
- }
- // -----------------------------------------------------------------------------
- #pragma segment ARes
- pascal void TLineView::Draw(Rect* /* area */)
- {
- Point aPenSize;
- Rect aFrame;
-
- ForeColor(blackColor);
- for (short lineIndex = 1; lineIndex < 5; lineIndex++){
- PenSize(1, lineIndex);
- MoveTo(gLineRect[lineIndex-1].left + 2, gLineRect[lineIndex-1].top + 3);
- Line(16, 0);
- }
- this->GetQDExtent(&aFrame);
- SetPt(&aPenSize, 1, 1);
- this->Adorn(&aFrame, aPenSize, adnLineBottom + adnLineTop + adnLineRight + adnLineLeft);
-
- }
-
- // ----------------------------------------------------------------------------
- #pragma segment ARes
- pascal void TLineView::DoHighlightSelection(HLState fromHL, HLState toHL)
- {
- Rect viewBorder;
-
- PenNormal();
- Rect aRect = gLineRect[fDrawDocument->GetLineCmd() - cLineNormal];
- SetHLPenState(fromHL, toHL);
- if ((fromHL == hlOn) && (toHL == hlOff)) {
- this->GetQDExtent(&viewBorder);
- InsetRect(&viewBorder, 1, 1);
- viewBorder.left = 22;
- EraseRect(&viewBorder);
- }
- else {
- PicHandle aPicHandle = GetPicture(1002);
- FailNIL(aPicHandle);
- Rect destRect = (**aPicHandle).picFrame;
- OffsetRect(&destRect, -destRect.left, -destRect.top);
- OffsetRect(&destRect, aRect.left + 24, aRect.top+1);
- DrawPicture(aPicHandle, &destRect);
- }
- }
-
- // ----------------------------------------------------------------------------
- #pragma segment ASelCommand
- pascal TCommand* TLineView::DoMouseCommand(Point* theMouse,
- EventInfo* /* info */,
- Point* /* hysteresis */)
- {
- CmdNumber newLineCmd = (theMouse->v / 16) + cLineNormal;
- if ((newLineCmd < cLineNormal + 4))
- this->ChangeSelection(newLineCmd);
- return gNoChanges; // not "Undo"able
- }
-
- // =========================================================================
- #pragma segment ASelCommand
- pascal void TDraw::IDraw(const Rect *size, RGBColor *itsColor, ConstPatternParam *itsPattern, short itsLineSize)
- {
- fFrame = *size;
- fColor = *itsColor;
- fShapeType = 'dflt';
- memcpy(&fPattern, itsPattern, 8);
- fLineSize = itsLineSize;
- }
-
- // ------------------------------------------------------------------------
- #pragma segment ARes
- pascal void TDraw::DrawDraw()
- {
- RGBForeColor(&fColor);
- Handle aHandle = GetIcon(2);
- FailNILResource(aHandle);
- Rect aRect = this->ReturnFrame();
- PlotIcon(&aRect, aHandle);
- ForeColor(blackColor);
- }
-
- // ------------------------------------------------------------------------
- #pragma segment ASelCommand
- pascal Rect TDraw::ReturnFrame()
- {
- return fFrame;
- }
-
- // -----------------------------------------------------------------------------
- #pragma segment AWriteFile
- pascal long TDraw::ReturnBytes()
- {
- return sizeof(fFrame) + sizeof(fColor) + sizeof(fPattern) + sizeof(fLineSize);
- }
-
-
- // -----------------------------------------------------------------------------
- #pragma segment AReadFile
- pascal void TDraw::ReadDraw(short aRefNum)
- {
- long dataBytes = this->ReturnBytes(); // data = frame + color + fPattern + fLineSize
- FailOSErr(FSRead(aRefNum, &dataBytes, (Ptr) &fFrame));
- }
-
- // ------------------------------------------------------------------------
- #pragma segment AWriteFile
- pascal void TDraw::WriteDraw(short aRefNum)
- {
- long dataBytes;
-
- dataBytes = sizeof(fShapeType);
- FailOSErr(FSWrite(aRefNum, &dataBytes, (Ptr) &fShapeType));
- dataBytes = this->ReturnBytes();
- FailOSErr(FSWrite(aRefNum, &dataBytes, (Ptr) &fFrame));
- }
-
- // ------------------------------------------------------------------------
- #if qInspector
- #pragma segment AFields
- pascal void TDraw::Fields(pascal void (*DoToField)(StringPtr fieldName, Ptr fieldAddr, short
- fieldType, void *DoToField_StaticLink), void *DoToField_StaticLink)
- {
- DoToField("\pTDraw", NULL, bClass, DoToField_StaticLink);
- DoToField("\pfFrame", (Ptr) &fFrame, bRect, DoToField_StaticLink);
- DoToField("\pfColor", (Ptr) &fColor, bInteger, DoToField_StaticLink);
- inherited::Fields(DoToField, DoToField_StaticLink);
- };
- #endif
-
-
- // =========================================================================
- #pragma segment ASelCommand
- pascal void TDrawingRect::IDraw(const Rect *size, RGBColor *itsColor, ConstPatternParam *itsPattern, short itsLineSize)
- {
- inherited::IDraw(size, itsColor, itsPattern, itsLineSize);
- fShapeType = typeRectangle;
- }
-
- // ------------------------------------------------------------------------
- #pragma segment ARes
- pascal void TDrawingRect::DrawDraw()
- {
- Pattern aPat;
-
- RGBForeColor(&fColor);
- Rect aRect = this->ReturnFrame();
- PenNormal();
- PenSize(fLineSize, fLineSize);
- unsigned char pp = 0;
- for(short i=0;i<8;i++)
- pp = pp + fPattern[i];
- if (pp == 0) {
- FrameRect(&aRect);
- }
- else {
- PenPat((ConstPatternParam)fPattern);
- PaintRect(&aRect);
- }
- PenNormal();
- ForeColor(blackColor);
- }
-
- // =========================================================================
- #pragma segment ASelCommand
- pascal void TDrawingOval::IDraw(const Rect *size, RGBColor *itsColor, ConstPatternParam *itsPattern, short itsLineSize)
- {
- inherited::IDraw(size, itsColor, itsPattern, itsLineSize);
- fShapeType = typeOval;
- }
-
- // ------------------------------------------------------------------------
- #pragma segment ARes
- pascal void TDrawingOval::DrawDraw()
- {
- Pattern aPat;
-
- RGBForeColor(&fColor);
- Rect aRect = this->ReturnFrame();
- PenNormal();
- PenSize(fLineSize, fLineSize);
- unsigned char pp = 0;
- for(short i=0;i<8;i++)
- pp = pp + fPattern[i];
- if (pp == 0) {
- FrameOval(&aRect);
- }
- else {
- PenPat((ConstPatternParam)fPattern);
- PaintOval(&aRect);
- // FillOval(&aRect, (ConstPatternParam)fPattern);
- }
- PenNormal();
- ForeColor(blackColor);
- }
-
- // =========================================================================
- #pragma segment ASelCommand
- pascal void TDrawingLine::IDraw(const Rect *size, RGBColor *itsColor, ConstPatternParam *itsPattern, short itsLineSize)
- {
- inherited::IDraw(size, itsColor, itsPattern, itsLineSize);
- fShapeType = typeGraphicLine;
- }
-
- // ------------------------------------------------------------------------
- #pragma segment ARes
- pascal void TDrawingLine::DrawDraw()
- {
-
- RGBForeColor(&fColor);
- Rect aRect = this->ReturnFrame();
- PenNormal();
- PenSize(fLineSize, fLineSize);
- MoveTo(fStartPoint.h, fStartPoint.v);
- LineTo(fEndPoint.h, fEndPoint.v);
- ForeColor(blackColor);
- }
-
- // -----------------------------------------------------------------------------
- #pragma segment AWriteFile
- pascal long TDrawingLine::ReturnBytes()
- {
- return inherited::ReturnBytes() + sizeof(fStartPoint) + sizeof(fEndPoint);
- }
-
-
- // -----------------------------------------------------------------------------
- #pragma segment AReadFile
- pascal void TDrawingLine::ReadDraw(short aRefNum)
- {
- inherited::ReadDraw(aRefNum);
- long dataBytes = sizeof(fStartPoint) + sizeof(fEndPoint);
- FailOSErr(FSRead(aRefNum, &dataBytes, (Ptr) &fStartPoint));
-
- }
-
- // ------------------------------------------------------------------------
- #pragma segment AWriteFile
- pascal void TDrawingLine::WriteDraw(short aRefNum)
- {
- long dataBytes;
-
- inherited::WriteDraw(aRefNum);
- dataBytes = sizeof(fStartPoint) + sizeof(fEndPoint);
- FailOSErr(FSWrite(aRefNum, &dataBytes, (Ptr) &fStartPoint));
- }
-
- // ------------------------------------------------------------------------
- #pragma segment ARes
- pascal void TDrawingLine::IStartEnd(Point startPoint, Point endPoint)
- {
- fStartPoint = startPoint;
- fEndPoint = endPoint;
- }
-
- // =========================================================================
- #pragma segment ASelCommand
- pascal void TDrawingRRect::IDraw(const Rect *size, RGBColor *itsColor, ConstPatternParam *itsPattern, short itsLineSize)
- {
- inherited::IDraw(size, itsColor, itsPattern, itsLineSize);
- fShapeType = typeRoundedRectangle;
- }
-
- // ------------------------------------------------------------------------
- #pragma segment ARes
- pascal void TDrawingRRect::DrawDraw()
- {
- Pattern aPat;
-
- RGBForeColor(&fColor);
- Rect aRect = this->ReturnFrame();
- PenNormal();
- PenSize(fLineSize, fLineSize);
- unsigned char pp = 0;
- for(short i=0;i<8;i++)
- pp = pp + fPattern[i];
- if (pp == 0) {
- FrameRoundRect(&aRect, fOval.h, fOval.v);
- }
- else {
- PenPat((ConstPatternParam)fPattern);
- PaintRoundRect(&aRect, fOval.h, fOval.v);
- // FillRoundRect(&aRect, fOval.h, fOval.v, (ConstPatternParam)fPattern);
- }
- ForeColor(blackColor);
- }
-
- // -----------------------------------------------------------------------------
- #pragma segment AWriteFile
- pascal long TDrawingRRect::ReturnBytes()
- {
- return inherited::ReturnBytes() + sizeof(fOval);
- }
-
-
- // -----------------------------------------------------------------------------
- #pragma segment AReadFile
- pascal void TDrawingRRect::ReadDraw(short aRefNum)
- {
- inherited::ReadDraw(aRefNum);
- long dataBytes = sizeof(fOval);
- FailOSErr(FSRead(aRefNum, &dataBytes, (Ptr) &fOval));
-
- }
-
- // ------------------------------------------------------------------------
- #pragma segment AWriteFile
- pascal void TDrawingRRect::WriteDraw(short aRefNum)
- {
- long dataBytes;
-
- inherited::WriteDraw(aRefNum);
- dataBytes = sizeof(fOval);
- FailOSErr(FSWrite(aRefNum, &dataBytes, (Ptr) &fOval));
- }
-
- // ------------------------------------------------------------------------
- #pragma segment ARes
- pascal void TDrawingRRect::ISetOval(Point ovalSize)
- {
- fOval = ovalSize;
- }
-
- // =========================================================================
- #pragma segment ASelCommand
- pascal void TDrawingPICT::IDraw(const Rect *size, RGBColor *itsColor, ConstPatternParam *itsPattern, short itsLineSize)
- {
- inherited::IDraw(size, itsColor, itsPattern, itsLineSize);
- fShapeType = typePICT;
- }
-
- // ------------------------------------------------------------------------
- #pragma segment ARes
- pascal void TDrawingPICT::DrawDraw()
- {
- DrawPicture(fPicHandle, &(**fPicHandle).picFrame);
- }
-
- // -----------------------------------------------------------------------------
- #pragma segment AWriteFile
- pascal long TDrawingPICT::ReturnBytes()
- {
- return inherited::ReturnBytes() + sizeof(Size) + GetHandleSize((Handle)fPicHandle);
- }
-
-
- // -----------------------------------------------------------------------------
- #pragma segment AReadFile
- pascal void TDrawingPICT::ReadDraw(short aRefNum)
- {
- Size aPicSize;
-
- inherited::ReadDraw(aRefNum);
- long dataBytes = sizeof(Size);
- FailOSErr(FSRead(aRefNum, &dataBytes, (Ptr)&aPicSize));
- fPicHandle = (PicHandle)NewHandle(aPicSize);
- dataBytes = aPicSize;
- FailOSErr(FSRead(aRefNum, &dataBytes, (Ptr)(*fPicHandle)));
-
- }
-
- // ------------------------------------------------------------------------
- #pragma segment AWriteFile
- pascal void TDrawingPICT::WriteDraw(short aRefNum)
- {
- long dataBytes;
- Size aPicSize;
-
- inherited::WriteDraw(aRefNum);
- dataBytes = sizeof(Size);
- aPicSize = GetHandleSize((Handle)fPicHandle);
- FailOSErr(FSWrite(aRefNum, &dataBytes, (Ptr)&aPicSize));
- dataBytes = aPicSize;
- FailOSErr(FSWrite(aRefNum, &dataBytes, (Ptr)(*fPicHandle)));
- }
-
- // ------------------------------------------------------------------------
- #pragma segment ARes
- pascal void TDrawingPICT::ISetPICT(PicHandle itsPICTHandle)
- {
- fPicHandle = itsPICTHandle;
- }
-
- // =========================== Command Object ================================
- #pragma segment ASelCommand
- pascal void TSketcher::ISketcher(TDrawView *itsView, TDrawDocument *itsDocument, OSType itsShapeType)
- {
- fDraw = NULL;
- fDrawView = itsView;
- fDrawDocument = itsDocument;
- TScroller* aScroller = itsView->GetScroller(true);
- fShapeType = itsShapeType;
- this->ICommand(cSketcher, // itsCmdNumber
- itsDocument, // itsDocument
- itsView, // itsView
- aScroller); // itsScroller
- fConstrainsMouse = false; // do not call TrackConstrain
- }
-
-
- // ------------------------------------------------------------------------------
- #pragma segment ARes
- pascal TCommand *TSketcher::TrackMouse(TrackPhase aTrackPhase,
- VPoint* anchorPoint,
- VPoint* /* previousPoint */,
- VPoint* nextPoint,
- Boolean /* mouseDidMove */)
- {
- AppleEvent qdAppleEvent;
- AppleEvent qdReply;
- Rect pBounds;
- Rect pDefRect;
- VRect pVDefRect;
- short pTransferMode;
- long pShape;
- Point pStartPoint;
- Point pEndPoint;
- Pattern pPenPattern;
- Pattern pFillPattern;
- short pLineArrow;
- short pPenWidth;
- short pCurveHeight;
- short pCurveWidth;
- RGBColor pPenColor;
- RGBColor pFillColor;
- Str255 docName;
- PicHandle pPicHandle;
- GrafPtr oldGrafPort;
-
- if (aTrackPhase == trackRelease){
- CmdNumber currentDocColor = fDrawDocument->GetColorCmd();
- TWindow* aWindow = fDrawView->GetWindow();
- TShapeGridView* aShapeGridView = (TShapeGridView*)aWindow->FindSubView('Gshp');
- TPatternView* aPatternView = (TPatternView*)aWindow->FindSubView('patt');
- pPenWidth = fDrawDocument->GetLineCmd() - cLineNormal +1;
-
- FailOSErr(AECreateAppleEvent(kAEQDGraphicsSuite, kAEEditGraphic, &gCurrentTarget, kAutoGenerateReturnID, kAnyTransactionID, &qdAppleEvent));
- pBounds.top = 0;
- pBounds.left = 0;
- pBounds.bottom = (short)fDrawView->fSize.v;
- pBounds.right = (short)fDrawView->fSize.h;
- FailOSErr(AEPutParamPtr(&qdAppleEvent, keyAEBounds, typeQDRectangle, (Ptr)&pBounds, sizeof(Rect)));
- pTransferMode = srcCopy;
- FailOSErr(AEPutParamPtr(&qdAppleEvent, keyAETransferMode, typeEnumeration, (Ptr)&pTransferMode, sizeof(short)));
- pShape = aShapeGridView->GetShapeType();
- switch (pShape) {
- case typeGraphicLine:
- pStartPoint = fDrawView->ViewToQDPt(anchorPoint);
- pEndPoint = fDrawView->ViewToQDPt(nextPoint);
- pDefRect = pBounds;
- pPenColor = gColorArray[currentDocColor - cBlack];
- pLineArrow = 0; // no allow
- memcpy(&pPenPattern, &qd.black, 8);
- FailOSErr(AEPutParamPtr(&qdAppleEvent, keyAEStartPoint, typeQDPoint, (Ptr)&pStartPoint, sizeof(Point)));
- FailOSErr(AEPutParamPtr(&qdAppleEvent, keyAEEndPoint, typeQDPoint, (Ptr)&pEndPoint, sizeof(Point)));
- FailOSErr(AEPutParamPtr(&qdAppleEvent, keyAEDefinitionRect, typeQDRectangle, (Ptr)&pDefRect, sizeof(Rect)));
- FailOSErr(AEPutParamPtr(&qdAppleEvent, keyAEPenColor, typeRGBColor, (Ptr)&pPenColor, sizeof(RGBColor)));
- FailOSErr(AEPutParamPtr(&qdAppleEvent, keyAELineArrow, typeEnumeration, (Ptr)&pLineArrow, sizeof(short)));
- FailOSErr(AEPutParamPtr(&qdAppleEvent, keyAEPenPattern, typePattern, (Ptr)&pPenPattern, sizeof(Pattern)));
- FailOSErr(AEPutParamPtr(&qdAppleEvent, keyAEPenWidth, typeShortInteger, (Ptr)&pPenWidth, sizeof(short)));
- break;
- case typeRectangle:
- case typeOval:
- case typeRoundedRectangle:
- Pt2VRect(anchorPoint, nextPoint, &pVDefRect);
- fDrawView->ViewToQDRect(&pVDefRect, &pDefRect);
- pFillColor = gColorArray[currentDocColor - cBlack];
- aPatternView->GetPattern(pFillPattern);
- pPenColor = gColorArray[currentDocColor - cBlack];
- aPatternView->GetPattern(pPenPattern);
- FailOSErr(AEPutParamPtr(&qdAppleEvent, keyAEDefinitionRect, typeQDRectangle, (Ptr)&pDefRect, sizeof(Rect)));
- FailOSErr(AEPutParamPtr(&qdAppleEvent, keyAEFillColor, typeRGBColor, (Ptr)&pFillColor, sizeof(RGBColor)));
- FailOSErr(AEPutParamPtr(&qdAppleEvent, keyAEFillPattern, typePattern, (Ptr)&pFillPattern, sizeof(Pattern)));
- FailOSErr(AEPutParamPtr(&qdAppleEvent, keyAEPenColor, typeRGBColor, (Ptr)&pPenColor, sizeof(RGBColor)));
- FailOSErr(AEPutParamPtr(&qdAppleEvent, keyAEPenPattern, typePattern, (Ptr)&pPenPattern, sizeof(Pattern)));
- FailOSErr(AEPutParamPtr(&qdAppleEvent, keyAEPenWidth, typeShortInteger, (Ptr)&pPenWidth, sizeof(short)));
- if (pShape == typeRoundedRectangle) {
- pCurveHeight = gOvalSize.v;
- pCurveWidth = gOvalSize.h;
- FailOSErr(AEPutParamPtr(&qdAppleEvent, keyAECurveHeight, typeShortInteger, (Ptr)&pCurveHeight, sizeof(short)));
- FailOSErr(AEPutParamPtr(&qdAppleEvent, keyAECurveWidth, typeShortInteger, (Ptr)&pCurveWidth, sizeof(short)));
- }
- break;
- case typePICT:
- Pt2VRect(anchorPoint, nextPoint, &pVDefRect);
- fDrawView->ViewToQDRect(&pVDefRect, &pDefRect);
- GetPort(&oldGrafPort);
- SetPort(fView->GetGrafPort());
- pPicHandle = OpenPicture(&pDefRect);
- fDrawView->Draw(&pDefRect);
- ClosePicture();
- SetPort(oldGrafPort);
- FailOSErr(AEPutParamPtr(&qdAppleEvent, keyAEGraphicObjects, typePICT, (Ptr)(*pPicHandle), GetHandleSize((Handle)pPicHandle)));
- KillPicture(pPicHandle);
- break;
- }
- FailOSErr(AEPutParamPtr(&qdAppleEvent, keyAEShape, typeType, (Ptr)&pShape, sizeof(long)));
- FailOSErr(AESend(&qdAppleEvent, &qdReply, kAENoReply, kAENormalPriority, 0, (IdleProcPtr)nil, (EventFilterProcPtr)nil));
- } // if (trackRelease
- return this;
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ADoCommand
- pascal void TSketcher::DoIt()
- {
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ADoCommand
- pascal void TSketcher::RedoIt()
- {
- this->DoIt();
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ADoCommand
- pascal void TSketcher::UndoIt()
- {
- // fDrawDocument->DeleteDraw(fDraw);
- // Rect DrawRect = fDraw->ReturnFrame();
- // fDrawView->InvalidRect(&DrawRect); // force update
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment AClose
- pascal void TSketcher::Free()
- {
- if (!fCmdDone)
- FreeIfObject(fDraw); // MacApp routine - Free Draw if (not finally displayed
- inherited::Free();
- }
-
-
- // ------------------------------------------------------------------------
- #if qInspector
- #pragma segment AFields
- pascal void TSketcher::Fields(pascal void (*DoToField)(StringPtr fieldName, Ptr fieldAddr, short
- fieldType, void *DoToField_StaticLink), void *DoToField_StaticLink)
- {
- DoToField("\pTSketcher", NULL, bClass, DoToField_StaticLink);
- DoToField("\pfDraw", (Ptr) &fDraw, bObject, DoToField_StaticLink);
- DoToField("\pfDrawDocument", (Ptr) &fDrawDocument, bObject, DoToField_StaticLink);
- DoToField("\pfDrawView", (Ptr) &fDrawView, bObject, DoToField_StaticLink);
- inherited::Fields(DoToField, DoToField_StaticLink);
- };
- #endif
-
- // =========================== Command Object ================================
- #pragma segment ASelCommand
- pascal void TDeleteCmd::IDeleteCmd(TDrawView *itsView, TDrawDocument *itsDocument)
- {
- fDrawView = itsView;
- fDrawDocument = itsDocument;
- fDeletedDraw = itsDocument->FirstDraw();
- TScroller* aScroller = itsView->GetScroller(true);
- this->ICommand(cDeleteFirstMsg, // itsCmdNumber
- itsDocument, // itsDocument
- itsView, // itsView
- aScroller); // itsScroller
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ADoCommand
- pascal void TDeleteCmd::DoIt()
- {
-
- fDrawDocument->DeleteDraw(fDeletedDraw);
- Rect DrawRect = fDeletedDraw->ReturnFrame();
- InsetRect(&DrawRect, -4, -4);
- fDrawView->InvalidRect(&DrawRect); // force update
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ADoCommand
- pascal void TDeleteCmd::RedoIt()
- {
- this->DoIt();
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ADoCommand
- pascal void TDeleteCmd::UndoIt()
- {
- fDrawDocument->AddDrawFirst(fDeletedDraw);
- Rect DrawRect = fDeletedDraw->ReturnFrame();
- fDrawView->InvalidRect(&DrawRect); // force update
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment AClose
- pascal void TDeleteCmd::Free()
-
- {
- if (fCmdDone)
- FreeIfObject(fDeletedDraw); // MacApp routine - Free Draw if not finally displayed
- inherited::Free();
- };
-
-
- // ------------------------------------------------------------------------
- #if qInspector
- #pragma segment AFields
- pascal void TDeleteCmd::Fields(pascal void (*DoToField)(StringPtr fieldName, Ptr fieldAddr, short
- fieldType, void *DoToField_StaticLink), void *DoToField_StaticLink)
- {
- DoToField("\pTDeleteCmd", NULL, bClass, DoToField_StaticLink);
- DoToField("\pfDeletedDraw", (Ptr) &fDeletedDraw, bObject, DoToField_StaticLink);
- DoToField("\pfDrawDocument", (Ptr) &fDrawDocument, bObject, DoToField_StaticLink);
- DoToField("\pfDrawView", (Ptr) &fDrawView, bObject, DoToField_StaticLink);
- inherited::Fields(DoToField, DoToField_StaticLink);
- };
- #endif
-
- // ==============================================================================
- #pragma segment ARes
- pascal void TShapeGridView::IRes(TDocument *itsDocument, TView *itsSuperView, Ptr *itsParams)
- {
- GridCell aCell;
-
- inherited::IRes(itsDocument, itsSuperView, itsParams);
- aCell.h = 1;
- aCell.v = 1;
- this->SelectCell(aCell, false, true, true);
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ADraw
- pascal void TShapeGridView::DrawCell(GridCell aCell, Rect *aQDRect)
- {
- Handle aShapeIcon = GetIcon(2000+aCell.h-1);
- FailNILResource(aShapeIcon);
- PlotIcon(aQDRect, aShapeIcon);
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ASelCommand
- pascal OSType TShapeGridView::GetShapeType()
- {
- switch (this->FirstSelectedCell().h) {
- case 1:
- return typeGraphicLine;
- case 2:
- return typeRectangle;
- case 3:
- return typeOval;
- case 4:
- return typeRoundedRectangle;
- case 5:
- return 'arc ';
- case 6:
- return typePICT;
- default:
- return 'dflt';
- }
-
- }
-
- // ==============================================================================
- #pragma segment ARes
- pascal void TPatternView::IRes(TDocument *itsDocument, TView *itsSuperView, Ptr *itsParams)
- {
- GridCell aCell;
-
- inherited::IRes(itsDocument, itsSuperView, itsParams);
- aCell.h = 1;
- aCell.v = 1;
- this->SelectCell(aCell, false, true, true);
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ADraw
- pascal void TPatternView::DrawCell(GridCell aCell, Rect *aQDRect)
- {
- Pattern aPat;
-
- GetIndPattern(aPat, 128, (aCell.h - 1) + (aCell.v - 1) * 10 + 1);
- PenSize(3,3);
- PenPat((ConstPatternParam)qd.white);
- FillRect(aQDRect, (ConstPatternParam)aPat);
- PenNormal();
- FrameRect(aQDRect);
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ADraw
- pascal void TPatternView::GetPattern(Pattern itsPattern)
- {
- GridCell aPat;
- short aPatNum;
-
- aPat = this->FirstSelectedCell();
- if (aPat.h != 0)
- aPatNum = (aPat.h-1)+(aPat.v-1)*10+1;
- else
- aPatNum = 0;
- GetIndPattern((Pattern)itsPattern, 128, aPatNum);
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ADoCommand
- pascal void TSetSelfCmd::DoIt()
- {
- gIsCurrentTargetSelf = true;
-
- AEDuplicateDesc(&gSELF, &gCurrentTarget);
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ADoCommand
- pascal void TSetTargetAddress::DoIt()
- {
- TargetID aTargetID;
- ProcessSerialNumber aTargetPSN;
- PortInfoRec aPortInfo;
- OSErr PPCresult;
- OSErr PSNError;
-
- PPCresult = PPCBrowser("\pLink to…","\p",false,&aTargetID.location,&aPortInfo,nil,"\p");
- if (PPCresult == noErr) {
- gIsCurrentTargetSelf = false;
- PSNError = GetProcessSerialNumberFromPortName(&aPortInfo.name, &aTargetPSN);
- if (PSNError == noErr) {
- gIsCurrentTargetLocal = true;
- FailOSErr(AECreateDesc(typeProcessSerialNumber,(Ptr)&aTargetPSN,sizeof(ProcessSerialNumber),&gCurrentTarget));
- }
- else {
- gIsCurrentTargetLocal = false;
- aTargetID.name = aPortInfo.name;
- FailOSErr(AECreateDesc(typeTargetID, (Ptr)&aTargetID, sizeof(TargetID), &gCurrentTarget));
- }
- }
- else { // if PPCresult == userCanceledErr
- gIsCurrentTargetSelf = true;
- FailOSErr(AEDuplicateDesc(&gSELF, &gCurrentTarget));
- }
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ADoCommand
- pascal void TLaunchApplication::DoIt()
- {
- StandardFileReply aSFR;
- SFTypeList aSFType;
- LaunchParamBlockRec aLaunchAppl;
- // ProcessInfoRec aLaunchPSNInfo;
- // OSErr aLaunchErr;
-
- aSFType[0] = 'APPL';
- StandardGetFile((FileFilterProcPtr)nil, 1, aSFType, &aSFR);
- if (aSFR.sfGood) {
- aLaunchAppl.launchBlockID = extendedBlock;
- aLaunchAppl.launchEPBLength = extendedBlock;
- aLaunchAppl.launchFileFlags = 0;
- aLaunchAppl.launchControlFlags = launchContinue + launchNoFileFlags;
- *aLaunchAppl.launchAppSpec = aSFR.sfFile;
- aLaunchAppl.launchAppParameters = (AppParametersPtr)nil;
- FailOSErr(LaunchApplication(&aLaunchAppl));
- // if (aLaunchErr == noErr) {
- //--------- Can lauched application handle AppleEvent?
- // FailOSErr(GetProcessInformation(&aLaunchAppl.launchProcessSN, &aLaunchPSNInfo) != noErr);
- // if ((aLaunchPSNInfo.processMode && modeHighLevelEventAware) != 0) {
- // gIsCurrentTargetSelf = false;
- // FailOSErr(AECreateDesc(typeProcessSerialNumber,(Ptr)&aLaunchAppl.launchProcessSN,sizeof(ProcessSerialNumber),&gCurrentTarget));
- // EnableCheck(cSetSelf, true, false);
- // EnableCheck(cSetTargetAddress, true, true);
- // }
- // }
- // else {
- // SysBeep(1);
- // }
- }
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ADoCommand
- pascal void TAEOldDocCommand::IAEOldDocCommand(CmdNumber itsCmdNumber)
- {
- this->IOldDocCommand(itsCmdNumber);
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ADoCommand
- pascal void TAEOldDocCommand::DoIt()
- {
- StandardFileReply aSFR;
- AppleEvent anAppleEvent;
- AEDescList aDocList;
- AEDesc aDocDesc;
- AppleEvent reply;
-
- StandardGetFile((FileFilterProcPtr)nil, -1, (SFTypeList)nil, &aSFR);
- if (aSFR.sfGood) {
- FailOSErr(AECreateAppleEvent(kCoreEventClass, kAEOpenDocuments, &gCurrentTarget, kAutoGenerateReturnID, kAnyTransactionID, &anAppleEvent));
- FailOSErr(AECreateDesc(typeFSS, (Ptr)&aSFR.sfFile, sizeof(FSSpec), &aDocDesc));
- FailOSErr(AECreateList((Ptr)nil, 0, false, &aDocList));
- FailOSErr(AEPutDesc(&aDocList, 1, &aDocDesc));
- FailOSErr(AEPutParamDesc(&anAppleEvent, keyDirectObject, &aDocList));
- FailOSErr(AESend(&anAppleEvent, &reply, kAENoReply, kAENormalPriority, 0, (IdleProcPtr)nil, (EventFilterProcPtr)nil));
- }
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ADoCommand
- pascal void TAENewDocCommand::IAENewDocCommand(CmdNumber itsCmdNumber)
- {
- this->INewDocCommand(itsCmdNumber);
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ADoCommand
- pascal void TAENewDocCommand::DoIt()
- {
- AppleEvent anAppleEvent;
- AppleEvent reply;
-
- FailOSErr(AECreateAppleEvent(kCoreEventClass, kAEOpenApplication, &gCurrentTarget, kAutoGenerateReturnID, kAnyTransactionID, &anAppleEvent));
- FailOSErr(AESend(&anAppleEvent, &reply, kAENoReply, kAENormalPriority, 0, (IdleProcPtr)nil, (EventFilterProcPtr)nil));
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ADoCommand
- pascal void TAECloseWindowCommand::IAECloseWindowCommand(CmdNumber itsCmdNumber)
- {
- this->ICloseWindowCommand(itsCmdNumber, gDrawApplication->GetFrontWindow());
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ADoCommand
- pascal void TAECloseWindowCommand::DoIt()
- {
- AppleEvent anAppleEvent;
- AppleEvent reply;
-
- Str255 docName;
- Str255 targetDocName;
- AEDesc dDoc;
- AEDesc dNull;
- AEDesc dDocName;
-
- TWindow* aWindow = NewTemplateWindow(1001, (TDocument*)nil);
- TDialogView* aDialogView = (TDialogView*)aWindow->FindSubView('dlog');
- gDrawApplication->GetFrontWindow()->GetTitle((StringPtr)&docName);
- TTEView* aTEView = (TTEView*)aWindow->FindSubView('edtx');
- aWindow->Open();
- // aTEView->SetText((StringPtr)&docName);
- // aDialogView->DrawContents();
- while (aDialogView->PoseModally() != 'okok');
- GetStr255FromTextHandle(aTEView->fText, (StringPtr)&targetDocName);
- aWindow->Close();
-
- FailOSErr(AECreateDesc(typeNull, nil, 0, &dNull));
- FailOSErr(AECreateDesc(typeChar, (Ptr)&targetDocName + 1, targetDocName[0], &dDocName));
- FailOSErr(CreateObjSpecifier(cDocument, &dNull, formName, &dDocName, true, &dDoc));
- FailOSErr(AECreateAppleEvent(kAECoreSuite, kAEClose, &gCurrentTarget, kAutoGenerateReturnID, kAnyTransactionID, &anAppleEvent));
- FailOSErr(AEPutParamDesc(&anAppleEvent, keyDirectObject, &dDoc));
- FailOSErr(AESend(&anAppleEvent, &reply, kAENoReply, kAENormalPriority, 0, (IdleProcPtr)nil, (EventFilterProcPtr)nil));
- }
-
- // ------------------------------------------------------------------------------
- #pragma segment ADoCommand
- pascal void TAEAboutAppCommand::DoIt()
- {
- AppleEvent anAppleEvent;
- AppleEvent reply;
-
-
- FailOSErr(AECreateAppleEvent(kCoreEventClass, kAEAbout, &gCurrentTarget, kAutoGenerateReturnID, kAnyTransactionID, &anAppleEvent));
- FailOSErr(AESend(&anAppleEvent, &reply, kAEQueueReply + kAEAlwaysInteract + kAECanSwitchLayer, kAENormalPriority, kAEDefaultTimeout, (IdleProcPtr)nil, (EventFilterProcPtr)nil));
- }
-
-